Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3-suhyun113 #12

Merged
merged 2 commits into from
Apr 11, 2024
Merged

3-suhyun113 #12

merged 2 commits into from
Apr 11, 2024

Conversation

suhyun113
Copy link
Collaborator

@suhyun113 suhyun113 commented Apr 3, 2024

πŸ”— 문제 링크

https://www.acmicpc.net/problem/14916

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

μ•½ 1μ‹œκ°„

✨ μˆ˜λ„ μ½”λ“œ

1. 문제 μ„€λͺ…

  • μ†λ‹˜μ—κ²Œ κ±°μŠ€λ¦„λˆμœΌλ‘œ 쀄 수 μžˆλŠ” 동전 : 2원, 5원(λ¬΄ν•œμ •μœΌλ‘œ 많이 쀄 수 있음)
  • κ·ΈλŸ¬λ‚˜, λ™μ „μ˜ κ°œμˆ˜κ°€ μ΅œμ†Œκ°€ λ˜λ„λ‘ 거슬러 주고자 ν•œλ‹€.
  • κ±°μŠ€λ¦„λˆ : n원 μΌλ•Œ, μ΅œμ†Œ λ™μ „μ˜ 개수 : coin_countλŠ” μ–Όλ§ˆμΌκΉŒ?


2. μ½”λ“œ μ„€λͺ…
κ±°μŠ€λ¦„λˆ n을 μž…λ ₯λ°›μ•„ μ΅œμ’…μ μœΌλ‘œ μ΅œμ†Œ λ™μ „μ˜ 개수λ₯Ό κ΅¬ν•œλ‹€.

  • κ±°μŠ€λ¦„λˆ n μž…λ ₯λ°›κΈ° & λ™μ „μ˜ 개수 μ΄ˆκΈ°ν™”
n = int(input()) # κ±°μŠ€λ¦„λˆ μ•‘μˆ˜
   coin_count = 0 # λ™μ „μ˜ 개수

  • λ¬΄ν•œλ£¨ν”„ μ΄μš©ν•˜μ—¬ 5원, 2μ›μ˜ 개수 κ΅¬ν•˜κΈ°
    2원과 5원 쀑 2μ›μ˜ 값이 더 크기 λ•Œλ¬Έμ—, λ™μ „μ˜ μ΅œμ†Œ 개수λ₯Ό ꡬ할 λ•Œ 5원뢀터 νŒλ³„ν•œλ‹€.
  1. 5μ›μœΌλ‘œ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” 경우 -> μ΅œμ†Œ λ™μ „μ˜ 개수 = 5μ›μ˜ 개수
if n % 5 == 0:  # 5둜 λ‚˜λˆ„μ–΄ 떨어지면 5μ›μ˜ κ°œμˆ˜κ°€ μ΅œμ†Œ λ™μ „μ˜ 개수
        coin_count += n // 5
        break

  1. 5의 배수 μ•„λ‹ˆλ©΄, κ±°μŠ€λ¦„λˆμ—μ„œ 2원씩 λΉΌλ©΄μ„œ 남은 동전이 5원 λ–¨μ–΄μ§€λŠ” κ°’ μ°ΎλŠ” 경우
 else: # 5의 배수 μ•„λ‹ˆλ©΄, κ±°μŠ€λ¦„λˆμ—μ„œ 2μ”© λΉΌλ©΄μ„œ 5둜 λ–¨μ–΄μ§€λŠ” 것을 찾음
        n -= 2
        coin_count += 1 # 5둜 λ‚˜λˆ λ–¨μ–΄μ§ˆ λ•Œλ§ˆλ‹€ 2μ›μ˜ λ™μ „μ˜ 개수 증가

  1. κ±°μŠ€λ¦„λˆμ—μ„œ 2원씩 λΉΌκΈ°λ₯Ό λ°˜λ³΅ν–ˆλŠ”λ°, 남은 동전이 5μ›μœΌλ‘œ 떨어지지 μ•Šμ•„ κ±°μŠ€λ¦„λˆμ΄ μŒμˆ˜κ°€ λ˜λŠ” 경우
    -> κ±°μŠ€λ¦„λˆ n < 0 이면 더 이상 κ±°μŠ¬λŸ¬μ€„ 수 μ—†μœΌλ―€λ‘œ -1 좜λ ₯ν•œλ‹€.
 if (n < 0):
    print(-1)

  1. κ·Έλ¦Ό μ°Έμ‘°


3. μ΅œμ’…μ½”λ“œ
n = int(input()) # κ±°μŠ€λ¦„λˆ μ•‘μˆ˜
coin_count = 0 # λ™μ „μ˜ 개수

while True: # λ¬΄ν•œλ£¨ν”„
# 2원보닀 5원이 더 큰 값이기 λ•Œλ¬Έμ—, λ™μ „μ˜ μ΅œμ†Œ 개수λ₯Ό ꡬ할 λ•Œ 5원뢀터 νŒλ³„ν•¨
    if n % 5 == 0:  # 5둜 λ‚˜λˆ„μ–΄ 떨어지면 5μ›μ˜ κ°œμˆ˜κ°€ μ΅œμ†Œ λ™μ „μ˜ 개수
        coin_count += n // 5
        break
    else: # 5의 배수 μ•„λ‹ˆλ©΄, κ±°μŠ€λ¦„λˆμ—μ„œ 2μ”© λΉΌλ©΄μ„œ 5둜 λ–¨μ–΄μ§€λŠ” 것을 찾음
        n -= 2
        coin_count += 1 # 5둜 λ‚˜λˆ λ–¨μ–΄μ§ˆ λ•Œλ§ˆλ‹€ λ™μ „μ˜ 개수 증가

# κ±°μŠ€λ¦„λˆμ—μ„œ 2원씩 λΉΌλ‹€κ°€ κ±°μŠ€λ¦„λˆμ΄ 0보닀 μž‘μ•„μ§€λ©΄ 더 이상 κ±°μŠ¬λŸ¬μ€„ 수 μ—†μŒ
if (n < 0):
    print(-1)
else:
    print(coin_count)

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

κ±°μŠ€λ¦„λˆ λ¬Έμ œλŠ” μˆ˜μ—… μ‹œκ°„μ— 많이 ν’€μ–΄λ³Έ 것 κ°™μ•„μ„œ 간단할 것이라고 μƒκ°ν–ˆλ˜κ²Œ μ˜€μ‚°,,,μ΄μ—ˆλ‹€.
2원과 5μ›λ§Œ κ±°μŠ€λ¦„λˆμœΌλ‘œ 받을 수 μžˆμ–΄μ•Ό ν•΄μ„œ 이에 λŒ€ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ μ§œλŠ” 것이 μ–΄λ €μ› λ‹€.
κ²°κ΅­ μ—¬λŸ¬ μ½”λ“œλ₯Ό μ°Ύμ•„λ³΄λ©΄μ„œ 이 문제λ₯Ό μ΄ν•΄ν•˜κ³  겨우 ν’€ 수 μžˆμ—ˆλ‹€.
참고둜 이 λ¬Έμ œλŠ” DPλ‘œλ„ ν’€ 수 μžˆλŠ” 것 κ°™μ•˜λŠ”λ°, λ‹€μŒλ²ˆμ— κΈ°νšŒκ°€ λœλ‹€λ©΄ DPκ°œλ…μ„ μ’€ 더 κ³΅λΆ€ν•΄μ„œ
κ·Έ λ°©λ²•μœΌλ‘œλ„ ν•œ 번 풀어봐야겠닀.

Copy link
Collaborator

@pu2rile pu2rile left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

λ¬΄ν•œ 루프λ₯Ό 톡해 문제λ₯Ό ν’€ 수 μžˆκ΅°μš”!
μ €λŠ” μ²˜μŒμ— for in rangeλ₯Ό μ‚¬μš©ν•΄μ„œ μž…λ ₯받은 κ±°μŠ€λ¦„λˆμ˜ μ•‘μˆ˜κ°€ 0이 될 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•΄μ•Ό ν•˜λ‚˜ μ‹Άμ—ˆλŠ”λ° μˆ˜ν˜„ λ‹˜μ²˜λŸΌ μ½”λ“œλ₯Ό μ§œλ‹ˆ 쑰건도 잘 λ“€μ–΄κ°€κ³  μ•Œκ³ λ¦¬μ¦˜μ΄ 훨씬 κ°„νŽΈν•œ 것 κ°™μ•„μš” 덕뢄에 또 ν•˜λ‚˜ μ•Œμ•„κ°‘λ‹ˆλ‹· μˆ˜κ³ ν•˜μ…¨μ–΄μš”!~

Copy link
Member

@oesnuj oesnuj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 그리디 λ°©μ‹μœΌλ‘œ κ±°μŠ€λ¦„λˆμ˜ μ•‘μˆ˜λ₯Ό 5둜 λ‚˜λˆ„μ–΄λ–¨μ–΄μ§ˆλ•ŒκΉŒμ§€ -2μ”©ν•˜λŠ” 둜직으둜 ν’€μ—ˆλŠ”λ° DPλ‘œλ„ ν’€ 수 μžˆκ΅°μš”..!
DP도 κ³΅λΆ€ν•΄μ„œ λ‹€λ₯Έ λ°©λ²•μœΌλ‘œλ„ ν’€μ–΄λ΄μ•Όκ² λ„€μš” :)
PR μˆ˜κ³ ν•˜μ…¨μ–΄μš”πŸ‘

@Ghdrn1399
Copy link
Contributor

κ±°μŠ€λ¦„λˆ 문제 λŒ€ν‘œμ μΈ 그리디 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•œ 문제라고만 λ“€μ—ˆλŠ”λ° μ‹€μ œλ‘œ μˆ˜ν˜„λ‹˜μ΄ μž‘μ„±ν•΄μ£Όμ‹  μ½”λ“œλ₯Ό λ³΄λ‹ˆ μƒˆλ‘­κ²Œ μ•Œκ²Œ λ˜λŠ” 점듀이 λ§Žμ€ 것 κ°™λ„€μš”!! λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μœΌλ‘œλ„ ν’€κΈ° 전에 dp μ½”λ“œ μ°Έκ³ ν•˜μ‹œλ©΄ 쒋을것 κ°™μ•„μš”!

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define min(A,B) A < B ? A : B
 
int main() {
    int n, i, j;
    scanf("%d", &n);
    int* arr = (int*)calloc(n + 1, sizeof(int));
    for (i = 0; i < n + 1; i++)
        arr[i] = -1;
    arr[2] = 1;
    arr[5] = 1;
    for (i = 3; i < n + 1; i++) {
        if (arr[i - 2] != -1)
            arr[i] = arr[i - 2] + 1;
        if (arr[i - 5] != -1 && i > 5)
            arr[i] = min(arr[i], arr[i - 5] + 1);
    }
    printf("%d", arr[n]);
	return 0;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants